import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
/**Clase empleada para iniciar los hilos Escritura o lectura en 
 *  dependiendo de el cliente conectado al servidor, como tambien utilizada 
 *  para limitar la cantidad de clientes conectados simultaneamente
 * @author Francisco
 *
 */
public class Servidor_7 extends Thread {
	ServerSocket ss;
	Socket cliente;
	Monitor monitor;

	public Servidor_7(ServerSocket ss, Socket cliente, Monitor monitor) {
		this.ss = ss;
		this.cliente = cliente;
		this.monitor = monitor;
	}

	@Override
	public void run() {
		// Leer y determinar que hilo es, utilizar un contador en un monitor 1
		// para limitar el pasaje de mas de un hilo
		try {
			BufferedReader entradaDesdeElCliente = new BufferedReader(
					new InputStreamReader(cliente.getInputStream()));
			String mensaje = "";
			
				mensaje = entradaDesdeElCliente.readLine();
		
			if (mensaje.equalsIgnoreCase("Write") && monitor.isCanRead()) {
				ServerRead read = new ServerRead(ss, cliente, monitor);
				monitor.setCanRead(false);
				read.start();
				read.join();
				entradaDesdeElCliente.close();
				if(monitor.getCerrarServidor().equalsIgnoreCase("cerrar")){
					ss.close();
				}
			} else if (mensaje.equalsIgnoreCase("Read")
					&& monitor.isCanWrite()) {
				ServerWrite write = new ServerWrite(ss, cliente, monitor);
				monitor.setCanWrite(false);
				write.start();
				write.join();
				entradaDesdeElCliente.close();
			} else {
				PrintWriter salidaAlCliente = new PrintWriter(
						cliente.getOutputStream(), true);
				salidaAlCliente.println("Cliente incorrecto Siga jugando ...");
				entradaDesdeElCliente.close();
			}
		} catch (IOException e1) {
			e1.printStackTrace();
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}
